/*
*@功能：ESP32平衡车霍尔编码器测速测试
*@作者：刘泽文
*@时间：2020/3/18
*/

#include <WiFi.h>
#include <math.h>

//A相B相输入引脚定义
int AM1 = 18;
int BM1 = 19;
//电平是否变化标志位
int flagA = 0;
int flagB = 0;
//用来储存A相B相的脉冲数
double valA = 0;
double valB = 0;
//电机转速
double n;

//时间变量
unsigned long times;
//采样时间为100ms
float d_time = 100;

void setup() 
{
   Serial.begin(9600);//串口初始化
   pinMode(AM1,INPUT);
   pinMode(BM1,INPUT);//AM1、BM2引脚的输入方式
}

void loop() 
{
  times = millis();
  while((millis()-times)<d_time)//在采样时间内对编码器计数(四倍频)
   {
      if(digitalRead(AM1)==HIGH && flagA==0){
        valA++;
        flagA=1;
        }
      if(digitalRead(AM1)==LOW && flagA==1){
        valA++;
        flagA=0;
        }
      if(digitalRead(BM1)==HIGH && flagB==0){
        valB++;
        flagB=1;
        }
      if(digitalRead(BM1)==LOW && flagB==1){
        valB++;
        flagB=0;
        }
    }

    n=(valA+valB)/(d_time/1000);//计算转速
    Serial.print(n);
    Serial.println("rad/s");//输出转速数值
    //清零储存脉冲数的变量
    valA=0;
    valB=0;
}